package com.qfjy.service.impl;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * @ClassName ListCacheServiceImpl
 * @Description TODO
 * @Author guoweixin
 * @Date 2022/3/24
 * @Version 1.0
 */
@Service
@Slf4j
public class ListCacheServiceImpl {

    @Autowired
    private RedisTemplate<String,Object> redisTemplate;

    @Resource(name = "redisTemplate")
    private ListOperations<String,String> listOper;
    /**
     * redis 百度热点新闻列表key
     */
    static final String BAIDU_TOP_ARTICLE_LIST="baidu:top:article:list";
    /**
     * 案例1： 实现百度热点新闻列表（分页功能）
     * redis list   ===》java list
     */

    /**
     * 初始化热点新闻列表  5
     */
    public void initArticle(){
        listOper.rightPush(BAIDU_TOP_ARTICLE_LIST,"1 空难搜救现场家属呼喊“接你回家”");
        listOper.rightPush(BAIDU_TOP_ARTICLE_LIST,"2 张文宏:新冠没有那么吓人但仗难打");
        listOper.rightPush(BAIDU_TOP_ARTICLE_LIST,"3 杨紫琼确诊新冠");
        listOper.rightPush(BAIDU_TOP_ARTICLE_LIST,"4 恭喜刘少亮结束隔离回家");
        listOper.rightPush(BAIDU_TOP_ARTICLE_LIST,"5 恭喜李炎当选副市长");
    }

    /**
     * 1、增加首条  redis list
     */
    public void addLeftArticle(String context){
           listOper.leftPush(BAIDU_TOP_ARTICLE_LIST,context);
    }
    /**热点尾部*/
    public void addRightArticle(String context){
        listOper.rightPush(BAIDU_TOP_ARTICLE_LIST,context);
    }

    /**
     * 2、删除
     */

    /**
     * 3、查询热点新闻结果集
     * 分页查询
     *  start: （页数-1）* 页大小
     *
     *  end:  (页大小*当前页数）-1

     每页3条数据。  当前页数
     1页     start:  0     end:  2
     2页     start:  3     end:  5
     3页     start:  6     end:  8
     */
     public List<String> selectArticleByPage(long currPage,long pageSize){
         long start=(currPage-1)*pageSize;
         long end=(pageSize*currPage)-1;

        List<String> list= listOper.range(BAIDU_TOP_ARTICLE_LIST,start,end);

         return list;
     }

    /**
     * 4、更改
     */
     public void updateArticleByIndex(long index,String context){

         listOper.set(BAIDU_TOP_ARTICLE_LIST,index,context);
     }

     //--------------------------------------TODO 京东物流队列-------------------------------------------

    /**
     * 1、客户支付成功后
     * 系统会根据商家发货地址 + 客户收货地址 生成物流队列
     * 订单编号（唯一） 18位，12位。[分布式ID]
     */
    public void productsQueueInit(String cardId){

        // 物流队列  list key
        String key="products:queue:"+cardId;

        listOper.leftPush(key,"1、商家发货（北京市海淀区）---》快递人员已揽件。");
        listOper.leftPush(key,"2、海淀区--》北京首都国际机场 ");
        listOper.leftPush(key,"3、首都机场--》南京禄口机场");
        listOper.leftPush(key,"4、禄口机场--》建邺区");
        listOper.leftPush(key,"5、建邺区--》应天大街780（千锋教育）");
        listOper.leftPush(key,"6、已签收");

    }

    /**
     * TODO 消费任务（快递小哥）
     *  扫描pos: 快递 touch
     */
    public String touchQueue(String cardId){
       //待执行的队列（物流队列）
        String key="products:queue:"+cardId;
        //执行成功的队列任务
        String keySucc="products:queue:succ:"+cardId;
        //高级命令 rpoplpush

       String queueName=listOper.rightPopAndLeftPush(key,keySucc);
       // log.info("快递小哥完成了任务的处理--》"+queueName);
       return queueName;
    }

    /**
     * TODO 客户： 我的商品运输到哪里了？ (收货拦）
     */
    public List<String> productsTaskQueueSucc(String cardId){
        //执行成功的队列任务
        String keySucc="products:queue:succ:"+cardId;

        return listOper.range(keySucc,0,-1);
    }
    /**
     * TODO 物流（平台/商家）：商品还有几站完成运输？
     */
    public List<String>  productsTaskQueueExec(String cardId){
        //待执行的队列（物流队列）
        String key="products:queue:"+cardId;

        return listOper.range(key,0,-1);
    }

















}
